Last Updated: 2020-01-11
References: FLAC 8.1 Manual: User's Guide Problem Solving with FLAC; Command Reference; Fish in FLAC
This tutorial will provide background on how to initialize stress and porewater pressure conditions in FLAC. The tutorial will also cover user-defined FISH functions for estimating these initial conditions.
Anytime we model a geotechnical problem in FLAC, we need to specify initial conditions. The initial conditions are generally:
We are going to focus on initial stresses and porewater pressures since initial gridpoint velocities were mostly covered in 2.1 FLAC Boundary Conditions.
Initial conditions are assigned throughout the model, interior to the model boundaries.
This tutorial does not discuss groundwater flow boundary conditions. These will come in future classes!
It is very useful to specify the initial conditions in a user-defined fish function. This makes it easy to change simulation parameters and make sure that they are consistent in other parts of the model.
For example, if you are simulating a laboratory triaxial compression test with total vertical stress = 200 kPa, ko = 0.5, and initial pore pressure = 100, a function to define parameters might look like:
def $problem_definitions
$ko = 0.5 ;;[], lateral coefficient of stress
$syy_ini = -200. ;;[kPa], initial total axial stress
$pp_ini = 100. ;;[kPa], initial porewater pressure
;;;calculate initial radial stress from $ko, $syy_ini, and $pp_ini
$esyy_ini = $syy_ini + $pp_ini ;;[kPa], initial effective axial stress
$esxx_ini = $esyy_ini*ko ;;[kPa], initial effective radial stress
$sxx_ini = $esxx_ini - $pp_ini ;;[kPa], initial total radial stress
end
$problem_definitions
Side note on boundary conditions: Using a program definition like this means that you can also use these parameters for boundary conditions. Since this is triaxial compression loading, the boundary conditions would be:
apply sxx $sxx_ini i=gpi j=1,gpj
apply syy $syy_ini i=1,gpi j=gpj
fix x i=1
fix y j=1
The initial conditions must be assigned before the simulations are carried out. There are a few things to keep in mind:
The ini
command is used for this. If the stresses are uniform throughout the model, then you don't need to give a gridpoint range. For example:
ini sxx $sxx_ini
ini syy $syy_ini
ini szz $szz_ini
ini pp $pp_ini
If stress gradients need to be initialized for a soil profile, then the var
command is included with ini
.
define $problem_definition
$K0 = 0.5 ;[], consolidation ratio
$grav = 10.
$wt_depth = 0. ;[m], depth from surface to water table
$Ho = 6.5 ;[m], model height
$void_ratio = 1.2 ;[]
$rho_water = 1. ;[Mg/m^3]
$Gs = 2.5 ;[],rho_solids/rho_water (specific gravity of solids)
;;calculate the bulk density from specific gravity, water density, and void ratio
$rho_total = ($Gs*$rho_water+($void_ratio))/(1.+$void_ratio) ;[Mg/m^3]
end
$problem_definition
def $initial_conditions
$syy_bot = -1.*$Ho*$rho_total*$grav ;;[kPa], total vertical stress at the bottom of the model
$syy_var = -1.*$syy_bot - 0. ;;[kPa], difference between total vertical stress at the top of the model and bottom of the model
$pp_bot = ($Ho-$wt_depth)*$rho_water*$grav ;;[kPa], pore pressure at the bottom of the model
$pp_var = -1*$pp_bot ;;[kPa], difference between porewater pressure at the bottom of the model and top of the model
$syy_p_bot = $pp_bot + $syy_bot ;;[kPa], vertical effective stress at bottom
$sxx_p_bot = $syy_p_bot*$K0 ;;[kPa], horiz. Effective stress at bottom
$sxx_bot = $sxx_p_bot - $pp_bot ;;[kPa], horiz. Total stress at bottom
$sxx_var = -1.*$sxx_bot
command
ini pp $pp_bot var 0.,$pp_var j=1,$zj ;;$zj is number of zones in the j direction
ini syy $syy_bot var 0.,$syy_var j=1,$zj
ini sxx $sxx_bot var 0.,$sxx_var j=1,$zj
ini szz $sxx_bot var 0.,$sxx_var j=1,$zj
end_command
end
$initial_conditions
For this example, the ini
commands are called from within the $initial_conditions user-defined function.
Laboratory element simulations capture the loading conditions we test soil under in the lab. This is characterized by assuming uniform stresses throughout the element. Often we capture these conditions with single element simulations (using only one model zone).
This example is applicable to simulations of triaxial compression, direct simple shear, triaxial extension, 1D compression, and other laboratory test conditions.
def $ini_conditions
$syy_ini = 125. ;[kPa], initial total vertical stress
$sxx_ini = 175. ;[kPa], initial total horizontal stress
$pp_ini = 50. ;[kPa], initial porewater pressure
command
ini sxx $sxx_ini
ini syy $syy_ini
ini szz $sxx_ini
ini pp $pp_ini
end_command
end
$ini_conditions
In most geotechnical field conditions, we need to account for the stress gradients with depth.
def $prob_defs
$rho_total = 1.8 ;[Mg/m^3], total density
$top_elev = 0. ;[m], elevation of top of model boundary
$bot_elev = -10. ;[m], elevation of model bottom boundary
$rho_water = 1.0 ;[Mg/m^3], water density
$ko = 0.5 ;[], lateral stress coefficient
$grav = 10. ;[m/s^2], gravitational acceleration
end
$prob_defs
def $ini_conditions
$syy_bot = ($top_elev - $bot_elev)*$rho_total*$grav ;[kPa], total vertical stress at bottom boundary
$pp_bot = -1.($top_elev - $bot_elev)*$rho_water*$grav ;[kPa], pore pressure at bottom boundary
$sxx_bot = ($ko*($syy_bot + $pp_bot))-$pp_bot ;[kPa], total horizontal stress at bottom boundary
$syy_var = -1.*$syy_bot ;[kPa], variation of syy between top and bottom boundary
$sxx_var = -1.*$sxx_bot ;[kPa], variation of sxx between top and bottom boundary
$pp_var = -1.*$pp_bot ;[kPa], variation of pp between top and bottom
end
$ini_conditions
ini pp $pp_bot var 0.,$pp_var j=1,jzones
ini sxx $sxx_bot var 0.,$sxx_var j=1,jzones
ini szz $sxx_bot var 0.,$szz_var j=1,jzones
ini syy $syy_bot var 0.,$syy_var j=1,jzones